/* Die Klasse StandardAbweichungVor berechnet die Standardabweichung
 * von jeden vorgemerkten Buechern je nach Sachgebiet. 
 * Dafuer braucht es die Werte von
 * Haeufigkeit und Mittelwert von jeden vorgemerkten Buechern
 * 
 * Datei : StandardAbweichungVor.java  Autor : Kouende Steeve
 * Datum : 12.12.2011
 */

package statistik;                     /* diese package beinhaltet
                                        * alle notwendige klasse,
                                        * die zur Ausfuehrung diese 
                                        * Klasse benoetigt werden 
                                        */

import java.util.ArrayList;
import java.util.List;
import java.lang.Math;

/* 
 * die oeffentlichen Daten von der Klasse StandardAbweichungVor sind :
 * List < Integer > b_bestand : (beinhaltet wie viel mal jedes Buch
 *                              vorgemerkt ist)
 *  List <Float> b_frequenz: (beinhaltet wie viel mal jedes Buch 
 *  vorgemerkt ist im Vergleich zu anderen Buechern des gleiches 
 *  Sachgebiet)
 *  public ArrayList <Float> mittelwertVor: (wie ein Buch 
 *                    im Mittelwert vorgemerkt ist)
 *  public ArrayList <Float> standAbweichung (sammeln die Werte
 *                                          von standardabweichung)
 *                                          
 * int i,j,counter 
 * mediumSG newMediumSGSAVor: (beinhaltet eine Liste von alle Buecher,
 *  die im Bibliothek (nach Sachgebiete) vorhanden und ausleihbar 
 *  sind) 
 * ausMediumSG ausMediumSGSAVor : (beinhaltet eine Liste von allen 
 * vorgemerkten Buechern von der Bibliothek (nach Sachgebiete))
 * 
 *  die privaten Daten von der Klasse Haufigkeit sind :
 * 
 * String s; int m; float result, h, a;
 * int count
 * float a, b, f, x , tempo (zwischenspeicher von werte);
 * die Methoden von der Klasse Haufigkeit sind :
 * 
 * public void vorgemerkteBuch ()
 * public void hauefigkeitBuch ()
 * public void mittelwert ()
 * public void standAbweichung ()
 * public void Anzeigen ()
 */

public class StandardAbweichungVor
{

  public static void main (String[] args)
  {

    StandardAbweichungVor ausStandAb = new StandardAbweichungVor (2);

    ausStandAb.vorgemerkteBuch ();
    ausStandAb.hauefigkeitBuch ();
    ausStandAb.mittelwert ();
    ausStandAb.standAbweichung ();
    ausStandAb.Anzeige ();
  }

  float buchbestand, frequenz, standAb;
  int count, i, j;
  mediumSG mediumSGSAVor ;
  ausMediumSG ausMediumSGSAVor ; 
  public List<Integer> b_bestand = new ArrayList ();
  public List<Float> b_frequenz = new ArrayList ();
  public ArrayList<Float> mittelwertVor = new ArrayList<Float> ();
  public ArrayList<Float> standAbweichung = new ArrayList<Float> ();

  

  public StandardAbweichungVor (int sachgebiet)
  {
    mediumSGSAVor = new mediumSG (sachgebiet);
    ausMediumSGSAVor = new ausMediumSG (sachgebiet);
  }

  public void vorgemerkteBuch ()
  {

    for (i = 0; i < mediumSGSAVor.gibMedium ().size (); i++)
    {
      String s = (String) mediumSGSAVor.gibMedium ().get (i);
      int m = 0;

      for (j = 0; j < ausMediumSGSAVor.
          gibAusgelieheneMedium ().size (); j++)
      {
     // prueft ob ein medium ist in der ausgeliehenen List oder nicht
        if (s.equals (ausMediumSGSAVor.
            gibAusgelieheneMedium ().get (j)))                                                                                                  
        {
       // Wenn Ja zaehlt es wie viele mal das Medium ausgeliehen ist 
          m++; 
        }
      }
      b_bestand.add (m);
    }

  }

  /* Die funktion liefert, wie oft ein Buch im Vergleich zu andere
   * ausgeliehen ist
   */
  public void hauefigkeitBuch ()
  {
    float result, h, a;
    int count;

    for (count = 0; count < 
        mediumSGSAVor.gibMedium ().size (); count++)
    {
   // wie oft ein Buch ist ausgeliehen
      h = (float) b_bestand.get (count); 
   // die Zahl von gesamte ausgeliehenen Buecher                                     
      a = (float) ausMediumSGSAVor.gibAusgelieheneMedium ().size ();
   // Die Haeufigkeit pro Buch von ausgeliehen Buecher                                                                              
      result = (float) ( (h / a) * 100); 
   // List von Haeufigkeit der ausgeliehenen Buecher                             
      b_frequenz.add (result);                                     
    }   
  }

  //Berechnung von Mittelwert
  public void mittelwert ()
  {
    float result;

    
    for (count = 0; count < mediumSGSAVor.gibMedium ().size ();
         count++)
    {
      buchbestand = (float) b_bestand.get (count);
      frequenz = (float) b_frequenz.get (count);
      result = (float) ( (frequenz / 
          ausMediumSGSAVor.gibAusgelieheneMedium ().size ()) * 100);
      mittelwertVor.add (result);

    }
  }

  // Berechnung von standardabweichung
  public void standAbweichung ()
  {
    float a, b, f, x, tempo;
    int count;
    for (count = 0; count < 
        mediumSGSAVor.gibMedium ().size (); count++)
    {
      a = (float) ausMediumSGSAVor.gibAusgelieheneMedium ().size ();
      b = (float) b_bestand.get (count);
      f = (float) b_frequenz.get (count);
      x = (float) ( (f / a) * 100);
      tempo = (float) Math.sqrt ( (1 / a) * (b - x) * (b - x));
     
    }
  }

  public void Anzeige ()
  {
    int count;

    for (count = 0; count < mediumSGSAVor.gibMedium ().size (); count++)
    {
      System.out.printf ("Buch %s hat %.2f prozent \n",
          mediumSGSAVor.gibMedium ().get (count),
          standAbweichung.get (count));
    }
  }

}
